import { createApp } from 'vue';
import App from './App.vue'


const app = createApp(App);


// 引入ui
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn'

//导入ElementUI的消息通知组件，下面封装全局Ajax的时候处理异常的时候需要弹出通知
import { ElMessage} from 'element-plus'

app.use(ElementPlus, {
	zhCn
})

// 全局使用图标
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}



// import router from "./router/index.js" 默认会主动找index 所以可以不写，
import router from "./router"
/**
 * 全局注册 RouterView 和 RouterLink 组件。
	添加全局 $router 和 $route 属性。
	启用 useRouter() 和 useRoute() 组合式函数。
 this.$router.push('/about')
 */
app.use(router);


//导入JQuery库，因为Ajax用起来非常方便，支持同步和异步的Ajax请求
import $ from 'jquery';




//多环境url
let baseUrl=import.meta.env.VITE_SERVER 
//console.log('baseUrl:',baseUrl)
app.config.globalProperties.$baseUrl =baseUrl//设置全局变量$baseUrl

//封装全局Ajax公共函数
app.config.globalProperties.$http = function(url, method, data, async, fun) {
	$.ajax({
		url: baseUrl + url,
		type: method,
		dataType: 'json',
		contentType: "application/json",
		xhrFields: {
			withCredentials: true
		},
		headers: {
			"token": localStorage.getItem("token")
		},
		async: async,
		data: JSON.stringify(data),
		success: function(resp) {
			if (resp.code == 200) {
				fun(resp)
			} else {
				ElMessage.error({
					message: resp.msg,
					duration: 1200
				});
			}
		},
		error: function(e) {
			if (e.status == undefined) {
				ElMessage.error({
					message: "前端页面错误",
					duration: 1200
				});
			} else {
				let status = e.status
				if (status == 401) {
					router.push({
						name: 'Login'
					})
				} else {
					ElMessage.error({
						message: e.responseText,
						duration: 1200
					});
				}
			}

		}
	})
}

//封装用于判断用户是否具有某些权限的公共函数
app.config.globalProperties.isAuth = function(permission) {
	let permissions = localStorage.getItem("permissions");
	let flag = false
	for (let one of permission) {
		if (permissions.includes(one)) {
			flag = true
			break;
		}
	}
	return flag;
}




app.mount('#app')
